perm filename FAKE14.SAI[DOC,TOB] blob sn#079450 filedate 1973-12-22 generic text, type T, neo UTF8
00100	comment
00200		this version of fake finds the angular and position
00300		errors for the edge operator as a function of step height,
00400		position, and angle;
00500	comment
00600		conf=sqrt(s0sq/(s0sq+n0sq)) ie cosine
00700		diff=s0sq;
00800	
00900	BEGIN "EDGE_TEST"
01000	
01100	DEFINE SAFE_ARRAY=1;	comment this makes all arrays safe;
01200	REQUIRE "VISION.2[SYS,TOB]" SOURCE_FILE; comment vision language package;
01300	REQUIRE EDGE_FILE;
01400	REQUIRE EDGE_PRINT;
01500	REQUIRE TV_VARIABLES;
01600	REQUIRE FAKE_FILE;	! file for fake edges;
01700	
01800	
01900	DEFINE MAX_COUNT=2000;
02000	INTEGER	ENOUGH; ! how many samples (< max_count);
02100	
02200	ENOUGH←MAX_COUNT;
02300	EJINIT;	! init Hueckel operator;
02400	MODIFY(BITS);
     

00100	comment find the angular and position errors at threshold;
00200	TCRLF;
00300	WHILE YES("ANGULAR AND POSITION ERROR LOOP?") DO BEGIN "ERR_BLOCK"
00400	  INTEGER K;
00500	  INTEGER N;
00700	  SHORT REAL ALPHA,SUM_ALPHA,SUMSQ_ALPHA;
00800	  SHORT REAL DELTA,SUM_DELTA,SUMSQ_DELTA;
00900	  SHORT REAL STD_ALPHA,STD_DELTA;
01100	
01200	  MODIFY(ENOUGH);
01300	  ASK_FAKE;
01305	  NOISE_EDGE←NOISE_FAKE;
01310	  ASK_EDGE; ! ask for values for edge operator cutoffs;
02100	  WHILE YES("TEST EDGE OPERATOR? ") DO BEGIN "TST_LOOP"
02200	    FAKE;
02300	    OP_APPLY(NBHD_FAKE/2,NBHD_FAKE/2); ! try the edge operator on it;
02400	    ERROR_FAKE(ALPHA,DELTA);  ! get angle and perpend distance errors;
02500	    TCRLF;PRINT(ALPHA);
02900	    PRINT(DELTA);
03000	    END "TST_LOOP";
03100	  SUM_ALPHA←SUMSQ_ALPHA←SUM_DELTA←SUMSQ_DELTA←0;
03200	  N←0;
03300	  FOR K←1 STEP 1 UNTIL ENOUGH DO BEGIN "ERR_LOOP"
03400	    IF K MOD 20 = 0 THEN PRINT(K);
03500	    FAKE;
03600	    IF EJLI(NBHD_FAKE/2,NBHD_FAKE/2,0,0)∧¬BCOMP THEN BEGIN "INCR"
03700	
03800	      N←N+1;
03850	      ERROR_FAKE(ALPHA,DELTA); ! errors angle and perpend distance;
04200	      SUM_ALPHA←SUM_ALPHA+ALPHA;
04300	      SUMSQ_ALPHA←SUMSQ_ALPHA+ALPHA↑2;
04500	      SUM_DELTA←SUM_DELTA+DELTA;
04600	      SUMSQ_DELTA←SUMSQ_DELTA+DELTA↑2;
04700	      END "INCR";
04800	    END "ERR_LOOP";
04900	  TCRLF;PRINT(N);PRINT(SUMSQ_DELTA);PRINT(SUM_DELTA);
05000	  TCRLF;PRINT(SUMSQ_ALPHA);PRINT(SUM_ALPHA);
05100	  STD_ALPHA←SQRT((SUMSQ_ALPHA-SUM_ALPHA↑2/N)/N);
05200	  STD_DELTA←SQRT((SUMSQ_DELTA-SUM_DELTA↑2/N)/N);
05300	  TCRLF;
05400	  PRINT(STD_ALPHA);
05500	  PRINT(STD_DELTA);
05600	  END "ERR_BLOCK";
05700	END "EDGE_TEST";